#pragma once
#include <iostream>
#include <semaphore.h>
namespace semModule
{

    int defaultSemValue = 1;
    class sem
    {
    private:
        sem_t _semData;
        int _init_value = defaultSemValue; // 信号量的初始值
    public:
        sem(int data) : _init_value(data)
        {
            int n = sem_init(&_semData, 0, _init_value); // 初始化信号量
            (void)n;
        }
        ~sem()
        {
            int n = sem_destroy(&_semData); // 销毁信号量
            (void)n;
        }
        void P()
        {
            int n(::sem_wait(&_semData)); // 等待数据
            (void)n;
        }
        void V()
        {
            int n(::sem_post(&_semData)); // 释放空间
            (void)n;
        }
    };

} // namespace semModule
